package com.campus.commons.utils;

import java.util.Scanner;

public class DebugError {
    private static Scanner input = new Scanner(System.in);
    private static Boolean  state=false;


    public static void openDebug() {
        DebugError.state=true;
    }


    public static void closeDebug() {
        DebugError.state=false;
    }


    public static void show(Exception e) {
        if (!state) {
            return;
        }
        int i=1;
        StackTraceElement[] errors= e.getStackTrace();
        System.out.println("错误类型:"+e.getClass().getName()+",错误信息:"+e.getMessage()+",错误列表个数:"+errors.length);
        System.out.println("==============请选择调试类型================");
        System.out.println("-----> 1.显示所有错误列表");
        System.out.println("-----> 2.选择显示错误列表");
        System.out.println("\t\t请选择序号:");
        switch (input.nextInt()) {
            case 1:
                System.out.println("显示所有错误-->");
                for (StackTraceElement se:errors)
                    {
                    System.out.println("-----------------"+i+"个错误开始-----------------");
                    System.out.println("发现错误的类:"+se.getClassName());
                    System.out.println("发生错误的方法:"+se.getMethodName());
                    System.out.println("发生错误的文件:"+se.getFileName());
                    System.out.println("错误在第:"+se.getLineNumber()+"行");
                    System.out.println("-----------------"+i+"个错误结束-----------------");
                    i++;
                }
                break;
            case 2:
                System.out.println("总错误信息:"+errors.length+"条,请输入显示前多少条错误。");
                System.out.println("请输入:");
                int len = input.nextInt();//显示的条数
                if (len>e.getStackTrace().length) {
                    len=e.getStackTrace().length;
                }
                for (int j=0;j<len;j++) {
                    System.out.println("-----------------"+i+"个错误开始-----------------");
                    System.out.println("发现错误的类:"+errors[j].getClassName());
                    System.out.println("发生错误的方法:"+errors[j].getMethodName());
                    System.out.println("发生错误的文件:"+errors[j].getFileName());
                    System.out.println("错误在第:"+errors[j].getLineNumber()+"行");
                    System.out.println("-----------------"+i+"个错误结束-----------------");
                    i++;
                }
                break;
            default:
                System.out.println("输入错误,执行默认操作显示第一个错误。");
                System.out.println("-----------------"+i+"个错误开始-----------------");
                System.out.println("发现错误的类:"+errors[0].getClassName());
                System.out.println("发生错误的方法:"+errors[0].getMethodName());
                System.out.println("发生错误的文件:"+errors[0].getFileName());
                System.out.println("错误在第:"+errors[0].getLineNumber()+"行");
                System.out.println("-----------------"+i+"个错误结束-----------------");
                break;
        }
        System.out.println("本次调试结束~");
    }
}

